{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "import keras\n",
    "from keras import models\n",
    "from keras import layers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#路透社新闻分类\n",
    "(x_train,y_train),(x_test,y_test) = keras.datasets.reuters.load_data(num_words=10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(8982,)\n",
      "(8982, 46)\n",
      "(2246,)\n",
      "87\n"
     ]
    }
   ],
   "source": [
    "print(x_train.shape)\n",
    "print(y_train.shape)\n",
    "print(x_test.shape)\n",
    "print(len(x_train[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://s3.amazonaws.com/text-datasets/reuters_word_index.json\n",
      "557056/550378 [==============================] - 7s 13us/step\n"
     ]
    }
   ],
   "source": [
    "#查看新闻类容\n",
    "world_index = keras.datasets.reuters.get_word_index()\n",
    "reverse_world_index = dict([(value,key) for (key,value) in world_index.items()])\n",
    "decode_reverse = ' '.join([reverse_world_index.get(i - 3,'?') for i in x_train[0]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'? ? ? said as a result of its december acquisition of space co it expects earnings per share in 1987 of 1 15 to 1 30 dlrs per share up from 70 cts in 1986 the company said pretax net should rise to nine to 10 mln dlrs from six mln dlrs in 1986 and rental operation revenues to 19 to 22 mln dlrs from 12 5 mln dlrs it said cash flow per share this year should be 2 50 to three dlrs reuter 3'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "decode_reverse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "#label one-hot编码\n",
    "y_train = keras.utils.to_categorical(y_train)\n",
    "y_test = keras.utils.to_categorical(y_test)\n",
    "print(y_train[0])\n",
    "print(y_test[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#输入数据张量化\n",
    "import numpy as np\n",
    "\n",
    "def to_vector(seqences,dim = 10000):\n",
    "    result = np.zeros((len(seqences),dim))\n",
    "    for i, seqence in enumerate(seqences):\n",
    "        result[i,seqence] = 1\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = to_vector(x_train)\n",
    "x_test = to_vector(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "46\n"
     ]
    }
   ],
   "source": [
    "print(len(y_train[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义神经网络\n",
    "model = models.Sequential()\n",
    "model.add(layers.Dense(64,activation='relu',input_shape=(10000,),kernel_regularizer=keras.regularizers.l1_l2(l1=0.001,l2=0.001)))\n",
    "model.add(layers.Dropout(0.2))\n",
    "model.add(layers.Dense(64,activation='relu',kernel_regularizer=keras.regularizers.l1_l2(l1=0.001,l2=0.001)))\n",
    "model.add(layers.Dropout(0.2))\n",
    "model.add(layers.Dense(46,activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_21 (Dense)             (None, 64)                640064    \n",
      "_________________________________________________________________\n",
      "dropout_12 (Dropout)         (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_22 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dropout_13 (Dropout)         (None, 64)                0         \n",
      "_________________________________________________________________\n",
      "dense_23 (Dense)             (None, 46)                2990      \n",
      "=================================================================\n",
      "Total params: 647,214\n",
      "Trainable params: 647,214\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.compile(optimizer=keras.optimizers.RMSprop(0.001),loss = keras.losses.categorical_crossentropy,metrics=['acc'])\n",
    "model.build()\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "p_x_train=x_train[:7000]\n",
    "p_y_train=y_train[:7000]\n",
    "val_x = x_train[7000:]\n",
    "val_y = y_train[7000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#K折验证\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 7000 samples, validate on 1982 samples\n",
      "Epoch 1/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.6331 - acc: 0.7830 - val_loss: 1.6959 - val_acc: 0.7735\n",
      "Epoch 2/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.6433 - acc: 0.7843 - val_loss: 1.7073 - val_acc: 0.7795\n",
      "Epoch 3/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.6154 - acc: 0.7906 - val_loss: 1.7149 - val_acc: 0.7654\n",
      "Epoch 4/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.6201 - acc: 0.7879 - val_loss: 1.7057 - val_acc: 0.7780\n",
      "Epoch 5/40\n",
      "7000/7000 [==============================] - 1s 133us/step - loss: 1.6170 - acc: 0.7884 - val_loss: 1.6984 - val_acc: 0.7760\n",
      "Epoch 6/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.6192 - acc: 0.7904 - val_loss: 1.7016 - val_acc: 0.7689\n",
      "Epoch 7/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.6060 - acc: 0.7866 - val_loss: 1.6935 - val_acc: 0.7770\n",
      "Epoch 8/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.5930 - acc: 0.7936 - val_loss: 1.6977 - val_acc: 0.7805\n",
      "Epoch 9/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.6047 - acc: 0.7923 - val_loss: 1.7129 - val_acc: 0.7760\n",
      "Epoch 10/40\n",
      "7000/7000 [==============================] - 1s 139us/step - loss: 1.5942 - acc: 0.7943 - val_loss: 1.7107 - val_acc: 0.7790\n",
      "Epoch 11/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.6003 - acc: 0.7910 - val_loss: 1.7112 - val_acc: 0.7755\n",
      "Epoch 12/40\n",
      "7000/7000 [==============================] - 1s 135us/step - loss: 1.5843 - acc: 0.7959 - val_loss: 1.6813 - val_acc: 0.7825\n",
      "Epoch 13/40\n",
      "7000/7000 [==============================] - 1s 133us/step - loss: 1.5773 - acc: 0.7984 - val_loss: 1.6963 - val_acc: 0.7765\n",
      "Epoch 14/40\n",
      "7000/7000 [==============================] - 1s 135us/step - loss: 1.5851 - acc: 0.7980 - val_loss: 1.6775 - val_acc: 0.7810\n",
      "Epoch 15/40\n",
      "7000/7000 [==============================] - 1s 138us/step - loss: 1.5773 - acc: 0.7997 - val_loss: 1.6979 - val_acc: 0.7780\n",
      "Epoch 16/40\n",
      "7000/7000 [==============================] - 1s 135us/step - loss: 1.5746 - acc: 0.8011 - val_loss: 1.6930 - val_acc: 0.7760\n",
      "Epoch 17/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5701 - acc: 0.7936 - val_loss: 1.7087 - val_acc: 0.7780\n",
      "Epoch 18/40\n",
      "7000/7000 [==============================] - 1s 139us/step - loss: 1.5621 - acc: 0.8010 - val_loss: 1.7055 - val_acc: 0.7851\n",
      "Epoch 19/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5502 - acc: 0.8039 - val_loss: 1.6959 - val_acc: 0.7795\n",
      "Epoch 20/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5588 - acc: 0.8023 - val_loss: 1.7134 - val_acc: 0.7810\n",
      "Epoch 21/40\n",
      "7000/7000 [==============================] - 1s 141us/step - loss: 1.5606 - acc: 0.8010 - val_loss: 1.7008 - val_acc: 0.7815\n",
      "Epoch 22/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5454 - acc: 0.8029 - val_loss: 1.7113 - val_acc: 0.7830\n",
      "Epoch 23/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5492 - acc: 0.8056 - val_loss: 1.6817 - val_acc: 0.7851\n",
      "Epoch 24/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5401 - acc: 0.8061 - val_loss: 1.6731 - val_acc: 0.7856\n",
      "Epoch 25/40\n",
      "7000/7000 [==============================] - 1s 139us/step - loss: 1.5359 - acc: 0.8067 - val_loss: 1.6797 - val_acc: 0.7881\n",
      "Epoch 26/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5331 - acc: 0.8106 - val_loss: 1.6869 - val_acc: 0.7861\n",
      "Epoch 27/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5389 - acc: 0.8046 - val_loss: 1.6954 - val_acc: 0.7805\n",
      "Epoch 28/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5318 - acc: 0.8069 - val_loss: 1.6837 - val_acc: 0.7886\n",
      "Epoch 29/40\n",
      "7000/7000 [==============================] - 1s 139us/step - loss: 1.5197 - acc: 0.8163 - val_loss: 1.6917 - val_acc: 0.7851\n",
      "Epoch 30/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5171 - acc: 0.8100 - val_loss: 1.6846 - val_acc: 0.7941\n",
      "Epoch 31/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5203 - acc: 0.8093 - val_loss: 1.6769 - val_acc: 0.7896\n",
      "Epoch 32/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.5246 - acc: 0.8104 - val_loss: 1.6856 - val_acc: 0.7936\n",
      "Epoch 33/40\n",
      "7000/7000 [==============================] - 1s 138us/step - loss: 1.5069 - acc: 0.8154 - val_loss: 1.6781 - val_acc: 0.7911\n",
      "Epoch 34/40\n",
      "7000/7000 [==============================] - 1s 137us/step - loss: 1.5098 - acc: 0.8147 - val_loss: 1.7056 - val_acc: 0.7841\n",
      "Epoch 35/40\n",
      "7000/7000 [==============================] - 1s 140us/step - loss: 1.5130 - acc: 0.8111 - val_loss: 1.6591 - val_acc: 0.7906\n",
      "Epoch 36/40\n",
      "7000/7000 [==============================] - 1s 136us/step - loss: 1.5006 - acc: 0.8149 - val_loss: 1.6796 - val_acc: 0.7936\n",
      "Epoch 37/40\n",
      "7000/7000 [==============================] - 1s 133us/step - loss: 1.5122 - acc: 0.8161 - val_loss: 1.6807 - val_acc: 0.7901\n",
      "Epoch 38/40\n",
      "7000/7000 [==============================] - 1s 132us/step - loss: 1.4969 - acc: 0.8174 - val_loss: 1.6771 - val_acc: 0.7967\n",
      "Epoch 39/40\n",
      "7000/7000 [==============================] - 1s 135us/step - loss: 1.4904 - acc: 0.8187 - val_loss: 1.7211 - val_acc: 0.7871\n",
      "Epoch 40/40\n",
      "7000/7000 [==============================] - 1s 134us/step - loss: 1.4923 - acc: 0.8204 - val_loss: 1.6858 - val_acc: 0.7901\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(p_x_train,p_y_train,batch_size=128,epochs=40,validation_data=(val_x,val_y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "history = history.history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x268b75c05c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xlabel = range(1,len(history['acc'])+1)\n",
    "plt.plot(xlabel,history['acc'],'bo',label='train acc')\n",
    "plt.plot(xlabel,history['val_acc'],'b',label='val acc')\n",
    "plt.xlabel('epoch')\n",
    "plt.ylabel('acc')\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
